package com.sdb.stats.service.impl;

import com.sdb.stats.domain.Departstats;
import com.sdb.stats.domain.Docterstats;
import com.sdb.stats.domain.Todaystats;
import com.sdb.stats.mapper.StatsMapper;
import com.sdb.stats.service.StatsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

@Service
public class StatsServiceImpl implements StatsService {

    @Autowired
    private StatsMapper statsMapper;

    @Override
    public Todaystats getTodayStats() {
        Todaystats stats = statsMapper.selectTodayStats();
        // 处理可能的空值
        if (stats.getRegister() == null) stats.setRegister(0);
        if (stats.getCancel() == null) stats.setCancel(0);
        if (stats.getConsultation() == null) stats.setConsultation(0);
        return stats;
    }

    @Override
    public List<Departstats> getDeptStats() {
        // 获取挂号统计
        List<Departstats> registerStats = statsMapper.selectRegisterStats();

        // 获取接诊统计
        List<Departstats> consultationStats = statsMapper.selectConsultationStats();

        // 使用 Map 合并数据
        Map<String, Departstats> resultMap = new LinkedHashMap<>();

        // 处理挂号数据
        registerStats.forEach(dto ->
                resultMap.put(dto.getDepartmentName(),
                        new Departstats(
                                dto.getDepartmentName(),
                                dto.getRegisterCounts(),
                                0
                        ))
        );

        // 合并接诊数据
        consultationStats.forEach(dto -> {
            if (resultMap.containsKey(dto.getDepartmentName())) {
                Departstats existing = resultMap.get(dto.getDepartmentName());
                existing.setConsultationCounts(dto.getConsultationCounts());
            } else {
                resultMap.put(dto.getDepartmentName(),
                        new Departstats(
                                dto.getDepartmentName(),
                                0,
                                dto.getConsultationCounts()
                        ));
            }
        });

        return new ArrayList<>(resultMap.values());
    }

    @Override
    public List<Docterstats> getDocterStats() {
        return statsMapper.selectDoctorStats();
    }
}
